/*
 * Copyright 2012-2022 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.springframework.boot.web.server;

import java.net.InetAddress;
import java.util.Set;

/**
 * 可配置的 {@link WebServerFactory} 接口。
 *
 * @author Phillip Webb
 * @author Brian Clozel
 * @since 2.0.0
 * @see ErrorPageRegistry
 */
public interface ConfigurableWebServerFactory extends WebServerFactory, ErrorPageRegistry {

	/**
	 * 设置 Web 服务器监听的端口。如果未指定，则默认使用端口 8080。
	 * 使用端口 -1 表示禁用自动启动（即启动 Web 应用上下文但不监听任何端口）。
	 * @param port 要设置的端口号
	 */
	void setPort(int port);

	/**
	 * 设置服务器绑定的具体网络地址。
	 * @param address 要设置的地址（默认值为 {@code null}）
	 */
	void setAddress(InetAddress address);

	/**
	 * 设置处理异常时使用的错误页面。
	 * @param errorPages 错误页面集合
	 */
	void setErrorPages(Set<? extends ErrorPage> errorPages);

	/**
	 * 设置应用于服务器默认连接器的 SSL 配置。
	 * @param ssl SSL 配置
	 */
	void setSsl(Ssl ssl);

	/**
	 * 设置用于获取 SSL 存储的提供者。
	 * @param sslStoreProvider SSL 存储提供者
	 */
	void setSslStoreProvider(SslStoreProvider sslStoreProvider);

	/**
	 * 设置应用于服务器的 HTTP/2 配置。
	 * @param http2 HTTP/2 配置
	 */
	void setHttp2(Http2 http2);

	/**
	 * 设置应用于服务器默认连接器的压缩配置。
	 * @param compression 压缩配置
	 */
	void setCompression(Compression compression);

	/**
	 * 设置服务器响应头中的 Server 字段值。
	 * @param serverHeader 服务器头部信息值
	 */
	void setServerHeader(String serverHeader);

	/**
	 * 设置应用于服务器的关闭配置。
	 * @param shutdown 关闭配置
	 * @since 2.3.0
	 */
	default void setShutdown(Shutdown shutdown) {
		// 默认空实现
	}

}
